package template_method_pattern;

/**
 * @author 申书航
 * @version 1.0
 *
 * 抽象类Trip，定义了一次旅行的模板方法，并提供抽象方法以供子类实现具体细节。
 */
public abstract class Trip {

    /**
     * 进行旅行的固定流程，包括交通、三天的活动和返回交通。
     */
    public final void performTrip() {
        goTransport();
        day1();
        day2();
        day3();
        backTransport();
    }

    /**
     * 抽象方法，定义去程的交通方式，由子类实现具体交通方式。
     */
    public abstract void goTransport();

    /**
     * 抽象方法，定义第一天的活动，由子类实现具体活动。
     */
    public abstract void day1();

    /**
     * 抽象方法，定义第二天的活动，由子类实现具体活动。
     */
    public abstract void day2();

    /**
     * 抽象方法，定义第三天的活动，由子类实现具体活动。
     */
    public abstract void day3();

    /**
     * 抽象方法，定义返回的交通方式，由子类实现具体交通方式。
     */
    public abstract void backTransport();

}
